package com.assignwork.service.impl;

import com.assignwork.dto.DailyPlanShiftTonSearchDTO;
import com.assignwork.entity.DailyPlanShiftTon;
import com.assignwork.mapper.DailyPlanShiftTonMapper;
import com.assignwork.service.IDailyPlanShiftTonService;
import com.assignwork.vo.DailyPlanShiftTonVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

/**
 * 昼夜计划班次吨数信息接口实现
 *
 * @author ：dujianyu
 * @since ：Created in 2024/4/23 15:56
 */
@Service
public class DailyPlanShiftTonServiceImpl extends BaseServiceImpl<DailyPlanShiftTonMapper, DailyPlanShiftTon> implements IDailyPlanShiftTonService {

    private final static BigDecimal DECIMAL_ZERO = new BigDecimal(0);

    @Override
    public boolean submitDailyPlanShiftTon(DailyPlanShiftTon entity) {
        QueryWrapper<DailyPlanShiftTon> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(DailyPlanShiftTon::getIsDeleted, 0)
                .eq(DailyPlanShiftTon::getPlanId, entity.getPlanId())
                .eq(DailyPlanShiftTon::getTimeSpace, entity.getTimeSpace())
                .eq(DailyPlanShiftTon::getPlanDate, entity.getPlanDate())
                .last("limit 1");
        DailyPlanShiftTon dailyPlanShiftTon = baseMapper.selectOne(queryWrapper);
        if (Func.isNull(dailyPlanShiftTon) || Func.isNull(dailyPlanShiftTon.getId())) {
            dailyPlanShiftTon = entity;
        }
        dailyPlanShiftTon.setPlanDate(entity.getPlanDate());
        dailyPlanShiftTon.setTimeSpace(entity.getTimeSpace());
        dailyPlanShiftTon.setPlanId(entity.getPlanId());
        dailyPlanShiftTon.setPreTon(entity.getPreTon());
        dailyPlanShiftTon.setFinishTon(entity.getFinishTon());
        return super.saveOrUpdate(dailyPlanShiftTon);
    }

    @Override
    public DailyPlanShiftTonVO getShiftTon(DailyPlanShiftTonSearchDTO dto) {
        DailyPlanShiftTonVO res = new DailyPlanShiftTonVO();
        res.setFinishTon(DECIMAL_ZERO);
        res.setPreTon(DECIMAL_ZERO);

        QueryWrapper<DailyPlanShiftTon> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
                .select(DailyPlanShiftTon::getId,DailyPlanShiftTon::getPreTon, DailyPlanShiftTon::getFinishTon)
                .eq(DailyPlanShiftTon::getIsDeleted, 0)
                .eq(DailyPlanShiftTon::getPlanId, dto.getPlanId())
                .eq(DailyPlanShiftTon::getTimeSpace, dto.getTimeSpace())
                .eq(DailyPlanShiftTon::getPlanDate, dto.getPlanDate())
                .last("limit 1");
        DailyPlanShiftTon dailyPlanShiftTon = baseMapper.selectOne(queryWrapper);
        if (!Func.isNull(dailyPlanShiftTon) && !Func.isNull(dailyPlanShiftTon.getId())) {
            res.setPreTon(dailyPlanShiftTon.getPreTon());
            res.setFinishTon(dailyPlanShiftTon.getFinishTon());
        }

        return res;
    }
}
